home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_10_04 / 1004071a < prev    next >
Text File  |  1992-02-17  |  23KB  |  952 lines

  1. /******************************************************************************
  2. * Module    :   Lexical Analyzer --- Process the input text file into tokens
  3. *                   that the parser can understand.
  4. *
  5. *               Copyright (C) 1990 John W. M. Stevens, All Rights Reserved
  6. *
  7. * Routines  :   Lex     - Return the next token from the file.
  8. *               OpenPrg - Open the source file.
  9. *               ParsErr - Report a parsing error.
  10. *
  11. * Author    :   John W. M. Stevens
  12. ******************************************************************************/
  13.  
  14. #include    <stdio.h>
  15. #include    <stdlib.h>
  16. #include    <ctype.h>
  17. #include    <string.h>
  18.  
  19. #include    "lex.h"
  20.  
  21. /* Structure of trie branch.    */
  22. typedef struct  key_st  {
  23.     char    c;
  24.     TKNS    token;
  25.     struct  key_st  *child;
  26. } NODE;
  27.  
  28. /* Constants local to this file.    */
  29. #define     MAX_STR     256
  30. #define     NOT_FND     -2
  31.  
  32. /* Object Data. */
  33. static  char    word[MAX_STR + 1];  /* Last string analyzed.                */
  34. static  char    PrvWd[MAX_STR + 1]; /* Previous word.                       */
  35. static  int     LnNo = 0;           /* The current line number in the file. */
  36. static  FILE    *PrgFl;             /* File pointer.                        */
  37.  
  38. /* Trie data structure containing all the keywords and punctuation marks for
  39. *   the language being tokenized.
  40. */
  41. static
  42. NODE    T5[2] = {
  43.     {   ' ',             2, NULL    },
  44.     {   'n',        ACTION, NULL    }
  45. };
  46.  
  47. static
  48. NODE    T4[2] = {
  49.     {   ' ',             2, NULL    },
  50.     {   'o',             0, T5  }
  51. };
  52.  
  53. static
  54. NODE    T3[2] = {
  55.     {   ' ',             2, NULL    },
  56.     {   'i',             0, T4  }
  57. };
  58.  
  59. static
  60.  
  61. NODE    T2[2] = {
  62.     {   ' ',             2, NULL    },
  63.     {   't',             0, T3  }
  64. };
  65.  
  66. static
  67. NODE    T8[2] = {
  68.     {   ' ',             2, NULL    },
  69.     {   'r',         AFTER, NULL    }
  70. };
  71.  
  72. static
  73. NODE    T7[2] = {
  74.     {   ' ',             2, NULL    },
  75.     {   'e',             0, T8  }
  76. };
  77.  
  78. static
  79. NODE    T6[2] = {
  80.     {   ' ',             2, NULL    },
  81.     {   't',             0, T7  }
  82. };
  83.  
  84. static
  85. NODE    T9[2] = {
  86.     {   ' ',             2, NULL    },
  87.     {   'd',           AND, NULL    }
  88. };
  89.  
  90. static
  91. NODE    Te[2] = {
  92.     {   ' ',             2, NULL    },
  93.     {   'e',       ARCHIVE, NULL    }
  94. };
  95.  
  96. static
  97. NODE    Td[2] = {
  98.     {   ' ',             2, NULL    },
  99.     {   'v',             0, Te  }
  100. };
  101.  
  102. static
  103. NODE    Tc[2] = {
  104.     {   ' ',             2, NULL    },
  105.     {   'i',             0, Td  }
  106. };
  107.  
  108. static
  109. NODE    Tb[2] = {
  110.     {   ' ',             2, NULL    },
  111.     {   'h',             0, Tc  }
  112. };
  113.  
  114. static
  115. NODE    Ta[2] = {
  116.     {   ' ',             2, NULL    },
  117.     {   'c',             0, Tb  }
  118. };
  119.  
  120. static
  121.  
  122. NODE    T16[2] = {
  123.     {   ' ',             2, NULL    },
  124.     {   's',    ATTRIBUTES, NULL    }
  125. };
  126.  
  127. static
  128. NODE    T15[2] = {
  129.     {   ' ',             2, NULL    },
  130.     {   'e',             0, T16 }
  131. };
  132.  
  133. static
  134. NODE    T14[2] = {
  135.     {   ' ',             2, NULL    },
  136.     {   't',             0, T15 }
  137. };
  138.  
  139. static
  140. NODE    T13[2] = {
  141.     {   ' ',             2, NULL    },
  142.     {   'u',             0, T14 }
  143. };
  144.  
  145. static
  146. NODE    T12[2] = {
  147.     {   ' ',             2, NULL    },
  148.     {   'b',             0, T13 }
  149. };
  150.  
  151. static
  152. NODE    T11[2] = {
  153.     {   ' ',             2, NULL    },
  154.     {   'i',             0, T12 }
  155. };
  156.  
  157. static
  158. NODE    T10[2] = {
  159.     {   ' ',             2, NULL    },
  160.     {   'r',             0, T11 }
  161. };
  162.  
  163. static
  164. NODE    Tf[2] = {
  165.     {   ' ',             2, NULL    },
  166.     {   't',             0, T10 }
  167. };
  168.  
  169. static
  170. NODE    T1[6] = {
  171.     {   ' ',             6, NULL    },
  172.     {   'c',             0, T2  },
  173.     {   'f',             0, T6  },
  174.     {   'n',             0, T9  },
  175.     {   'r',             0, Ta  },
  176.     {   't',             0, Tf  }
  177. };
  178.  
  179. static
  180. NODE    T1b[2] = {
  181.     {   ' ',             2, NULL    },
  182.  
  183.     {   'e',        BEFORE, NULL    }
  184. };
  185.  
  186. static
  187. NODE    T1a[2] = {
  188.     {   ' ',             2, NULL    },
  189.     {   'r',             0, T1b }
  190. };
  191.  
  192. static
  193. NODE    T19[2] = {
  194.     {   ' ',             2, NULL    },
  195.     {   'o',             0, T1a }
  196. };
  197.  
  198. static
  199. NODE    T18[2] = {
  200.     {   ' ',             2, NULL    },
  201.     {   'f',             0, T19 }
  202. };
  203.  
  204. static
  205. NODE    T17[2] = {
  206.     {   ' ',             2, NULL    },
  207.     {   'e',             0, T18 }
  208. };
  209.  
  210. static
  211. NODE    T23[2] = {
  212.     {   ' ',             2, NULL    },
  213.     {   'y',    DIRECTORY_T,    NULL    }
  214. };
  215.  
  216. static
  217. NODE    T22[2] = {
  218.     {   ' ',             2, NULL    },
  219.     {   'r',             0, T23 }
  220. };
  221.  
  222. static
  223. NODE    T21[2] = {
  224.     {   ' ',             2, NULL    },
  225.     {   'o',             0, T22 }
  226. };
  227.  
  228. static
  229. NODE    T20[2] = {
  230.     {   ' ',             2, NULL    },
  231.     {   't',             0, T21 }
  232. };
  233.  
  234. static
  235. NODE    T1f[2] = {
  236.     {   ' ',             2, NULL    },
  237.     {   'c',             0, T20 }
  238. };
  239.  
  240. static
  241. NODE    T1e[2] = {
  242.     {   ' ',             2, NULL    },
  243.  
  244.     {   'e',             0, T1f }
  245. };
  246.  
  247. static
  248. NODE    T1d[2] = {
  249.     {   ' ',             2, NULL    },
  250.     {   'r',             0, T1e }
  251. };
  252.  
  253. static
  254. NODE    T1c[2] = {
  255.     {   ' ',             2, NULL    },
  256.     {   'i',             0, T1d }
  257. };
  258.  
  259. static
  260. NODE    T26[2] = {
  261.     {   ' ',             2, NULL    },
  262.     {   'c',          EXEC, NULL    }
  263. };
  264.  
  265. static
  266. NODE    T25[2] = {
  267.     {   ' ',             2, NULL    },
  268.     {   'e',             0, T26 }
  269. };
  270.  
  271. static
  272. NODE    T24[2] = {
  273.     {   ' ',             2, NULL    },
  274.     {   'x',             0, T25 }
  275. };
  276.  
  277. static
  278. NODE    T2a[2] = {
  279.     {   ' ',             2, NULL    },
  280.     {   's',         FILES, NULL    }
  281. };
  282.  
  283. static
  284. NODE    T29[2] = {
  285.     {   ' ',             2, NULL    },
  286.     {   'e',             0, T2a }
  287. };
  288.  
  289. static
  290. NODE    T28[2] = {
  291.     {   ' ',             2, NULL    },
  292.     {   'l',             0, T29 }
  293. };
  294.  
  295. static
  296. NODE    T27[2] = {
  297.     {   ' ',             2, NULL    },
  298.     {   'i',             0, T28 }
  299. };
  300.  
  301. static
  302. NODE    T2f[2] = {
  303.     {   ' ',             2, NULL    },
  304.  
  305.     {   'n',        HIDDEN, NULL    }
  306. };
  307.  
  308. static
  309. NODE    T2e[2] = {
  310.     {   ' ',             2, NULL    },
  311.     {   'e',             0, T2f }
  312. };
  313.  
  314. static
  315. NODE    T2d[2] = {
  316.     {   ' ',             2, NULL    },
  317.     {   'd',             0, T2e }
  318. };
  319.  
  320. static
  321. NODE    T2c[2] = {
  322.     {   ' ',             2, NULL    },
  323.     {   'd',             0, T2d }
  324. };
  325.  
  326. static
  327. NODE    T2b[2] = {
  328.     {   ' ',             2, NULL    },
  329.     {   'i',             0, T2c }
  330. };
  331.  
  332. static
  333. NODE    T33[2] = {
  334.     {   ' ',             2, NULL    },
  335.     {   'l',         LABEL, NULL    }
  336. };
  337.  
  338. static
  339. NODE    T32[2] = {
  340.     {   ' ',             2, NULL    },
  341.     {   'e',             0, T33 }
  342. };
  343.  
  344. static
  345. NODE    T31[2] = {
  346.     {   ' ',             2, NULL    },
  347.     {   'b',             0, T32 }
  348. };
  349.  
  350. static
  351. NODE    T30[2] = {
  352.     {   ' ',             2, NULL    },
  353.     {   'a',             0, T31 }
  354. };
  355.  
  356. static
  357. NODE    T3a[2] = {
  358.     {   ' ',             2, NULL    },
  359.     {   'd',      MODIFIED, NULL    }
  360. };
  361.  
  362. static
  363. NODE    T39[2] = {
  364.     {   ' ',             2, NULL    },
  365.  
  366.     {   'e',             0, T3a }
  367. };
  368.  
  369. static
  370. NODE    T38[2] = {
  371.     {   ' ',             2, NULL    },
  372.     {   'i',             0, T39 }
  373. };
  374.  
  375. static
  376. NODE    T37[2] = {
  377.     {   ' ',             2, NULL    },
  378.     {   'f',             0, T38 }
  379. };
  380.  
  381. static
  382. NODE    T36[2] = {
  383.     {   ' ',             2, NULL    },
  384.     {   'i',             0, T37 }
  385. };
  386.  
  387. static
  388. NODE    T35[2] = {
  389.     {   ' ',             2, NULL    },
  390.     {   'd',             0, T36 }
  391. };
  392.  
  393. static
  394. NODE    T34[2] = {
  395.     {   ' ',             2, NULL    },
  396.     {   'o',             0, T35 }
  397. };
  398.  
  399. static
  400. NODE    T3d[2] = {
  401.     {   ' ',             2, NULL    },
  402.     {   'e',          NAME, NULL    }
  403. };
  404.  
  405. static
  406. NODE    T3c[2] = {
  407.     {   ' ',             2, NULL    },
  408.     {   'm',             0, T3d }
  409. };
  410.  
  411. static
  412. NODE    T3e[2] = {
  413.     {   ' ',             2, NUL